Nokogiri 鋸 教程翻译 :解析一个HTML/XML文档,Parsing an HTML/XML Document
我们尽力让这个过程对妳来说变得简单。真的狠简单!我们希望妳的生命更舒坦。
html_doc = Nokogiri :: HTML("<html><body><h1>Mr. Belvedere Fan Club</h1></body></html>")
xml_doc = Nokogiri :: XML("<root><aliens><alien><name>Alf</name></alien></aliens></root>")
其中 的变量 html_doc 和 xml_doc 是 Nokogiri文档对象 ,它们具有所有有趣的属性和方法,妳 可以在这里进一步阅读 。我们会在其它章节中说明其它内容。
注意,妳不需要将一个文件读入到一个字符串变量中。Nokogiri会自己做这件事。
f = File .open("blossom.xml")
doc = Nokogiri :: XML(f)
f.close
Nokogiri 狠聪明吧!
我理解,可能会有某些HTML文档是需要从互联网取到的。
require 'open-uri'
doc = Nokogiri :: HTML(open("http://www.threescompany.com/"))
Nokogiri提供 了狠多选项,它们会影响到文档被解析的方式。妳可以 在这里进一步阅读 ,不过,先说明一下,最常用的选项:
•. NOBLANKS - 去除空白 的节点
•. NOENT - 替换实体
•. NOERROR - 不输出错误报告
•. STRICT - 严格解析 ;当解析到不规范的文档时,抛出错误
•. NONET - 解析过程 中禁止任何网络连接。建议在解析未受信任的文档时开启此选项。
以下是它们的用法:
doc = Nokogiri :: XML(File .open("blossom.xml")) do |config|
config.strict.nonet
end
或
doc = Nokogiri :: XML(File .open("blossom.xml")) do |config|
config.options = Nokogiri :: XML :: ParseOptions :: STRICT | Nokogiri :: XML :: ParseOptions :: NONET
end
字符串在内部都是以UTF-8编码来储存的。那些返回文本值的方法,一定会以UTF-8编码来储存字符串。那些返回XML的方法(例如to_xml、to_html和inner_html)呢,会按照源文档的字符编码来对返回的字符串进行编码。
警告
某些文档会声明它们使用了某种编码,而实际上却使用另一种编码。对于这种情况,解析器应当使用哪种编码呢?
记住,数据只是一个字节流而已。只是我们人类向那个字节流上加上了含义。任何一个特定的字节集合,都可能在多种编码中有效,因此,对于编码的检测达到100%的准确率是不可能的。libxml2已经尽其所能,但是它不可能100%正确。
如果妳想让Nokogiri正确地处理文档的编码,那么,最好是显式设置编码方式。以下是一个示例,显式地将解析器所使用的编码设置为EUC-JP:
doc = Nokogiri . XML('<foo><bar /><foo>', nil, 'EUC-JP')
高阳公主和辩机
未知美人
Your opinionsHxLauncher: Launch Android applications by voice commands